
// 1获取用户收货地址
    // 1绑定点击事件
    // 2调用小程序内置的 api  获取用户收货地址
    // 2获取用户对小程序  所授予 获取地址的  权限状态 scope
      // 1假设用户点击获取收货地址的提示框确定 authSetting scope.address
      // scope值true  直接调用 获取收货地址
      // 2假设用户点击获取收货地址的提示框取消
      // scope值false
      // 3假设用户从来没有调用过收货地址的api
      // scope undefined   直接调用 获取收货地址
      // 3假设用户点击获取收货地址的提示框取消
      // scope值false
      // 1诱导用户自己打开授权设置  wx.openSetting 页面当用户重新给与获取地址权限的时候
      // 2获取收货地址
      // 4、把获取的收货地址  存入到 本地存储中
    // 2、页面加载完毕 onload onshow
        // 1获取本地存储中的地址数据
        // 2把数据设置给data中的 一个变量 
      // 3、onshow
      // 1、获取缓存中的购物车数组
      // 2、把购物车数据  填充到data中
    // 4、全选的实现  数据的展示
          // 1、onshow  获取缓存中购物车的数组
          // 2、根据购物车中的商品数据进行计算  所有的商品都被选中，checked = true，则全选被选中；
  // 5、商品的总价格总数量
        // 1、都需要商品被选中 我们才拿它计算
        // 2、获取购物车数组
        // 3、遍历
        // 4、判断商品是否被选中
        // 5、总价格 = 商品的单价*商品数量
        // 6、总数量 +=商品的数量 
        // 7、把计算后的数量和价格，设置会data中即可
  // 6、商品选中功能
      // 1、绑定change事件
      // 2、获取到被修改的商品对象
      // 3、商品对象的选中状态取反
      // 4、重新回填到data和缓存中
      // 5、重新计算全选 总价格  总数量
  // 7全选和反选
        // 1 全选的复选框绑定事件 change
        // 2 获取data中的全选变量 allChecked
        // 3 直接取反  allChecked =!allChecked
        // 4 遍历购物车数组 让里面的购物车商品选中状态跟随 allChecked
        // 5 购物车数组和选中状态重新设置到data 中
        // 6 购物车重新设置回缓存中
  // 8 商品数量的编辑功能
        // 1给+-按钮绑定同一个点击事件 区分关键  自定义属性
              // 1"+""+!"
              // 2 ' -' '-1'
        // 2传递被点击的商品id  goods_id
        // 3 获取data 中的购物车数组 来获取需要被修改的商品对象
        // 当购物车的数量 =1 是 用户点击 -
        // 弹窗询问 showModal 客户是否需要删除
          // 1确认执行删除操作
          // 2取消什么都不做
        // 4 直接修改商品对象的数量 num
        // 5 把cart数组  重新设置回缓存中 和data中  this.set  cart
  // 9点击结算
        // 1、判断有没有收货地址信息
        // 2、判断购物车有没有商品
        // 3、经过上面的验证，跳转支付页面！



import {getSetting,chooseAddress,openSetting,showModal,showToast} from "../../utils/asyncWx";
import regeneratorRuntime from '../../lib/runtime/runtime';
      

Page({
  data: {
    address:{},
    cart:{},
    num:1,
    allChecked:false,
    totalPrice:0,
    totalNum:0,
    hintStatus:true,
  },
  onShow: function () {
    //1获取缓存中的收货地址信息
    const address = wx.getStorageSync('address');
    // 1、获取缓存中的购物车数据
    const cart = wx.getStorageSync('cart')||[];//当值不存在时，将其定义为一个空数组，相当于三元表达式的写法
    // 判断购物车是否有数据，回显图片展示  
    if(cart.length>0){
      this.setData({
        hintStatus:false
      })
    }
    this.setData({address});
    this.setCart(cart);
    // 全选效果的 实现
    for(var i= 0;i<cart.length;i++){
      if(cart[i].checked == true){
          this.setData({
            allChecked:true
          })  
      }else{
        this.data.allChecked = false;
      }
    }
  },
  // 1点击收货地址触发的事件  wx.chooseAddress
  async handleChooseAddress(){
    try {
    // 1、获取权限状态
    const res1 =await getSetting();
    const scopeAddress = res1.authSetting['scope.address'];
        // 2、判断权限状态
        if(scopeAddress == false){
          await openSetting();
        }
        const res2 = await chooseAddress();
        wx.setStorageSync('address', res2);
        wx.setStorageSync('address1', res2.provinceName+res2.cityName+res2.countyName+res2.detailInfo);
  }catch (error) {
    console.log('error',error)
    }
  },

  // 全选功能的实现
  // 实现的逻辑就是保持,单个选项的选中状态与全选的选中状态保持一致即可
  checkboxChange(e){
    let cart = this.data.cart;
    let allChecked =this.data.allChecked;

    allChecked=!allChecked; 

    console.log('全选的实现',e.detail.value)
    if(e.detail.value.length>0){
      // for(var i= 0;i<cart.length;i++){
      //   cart[i].checked = true;
      //   this.setCart(cart);
      // }

      cart.forEach(v=>{
        v.checked = true;
        this.setCart(cart);
      })

    }else{
      cart.forEach(v=>{
        v.checked = false;
        this.setCart(cart);
      })
      // for(var i= 0;i<cart.length;i++){
      //   cart[i].checked = false;
      //   this.setCart(cart);
      // }
    }
  },

  // 商品的选中
handeItemChange(e){
    // 1获取被修改的商品id
    const goods_id = e.currentTarget.dataset.id;
    console.log('e',e.currentTarget.dataset.id)
    //2\获取购物车数组
    let {cart} = this.data;
    // 3 找到被修改的商品对象
    // let index = cart.findIndex(v=>v.goods_id == goods_id);
    var indexs ='';
    for(var i=0;i<cart.length;i++){
        if(cart[i].goods_id == goods_id ){
            indexs = i
        }
    }
    // 4 选中状态取反
    cart[indexs].checked = !cart[indexs].checked; 
    this.setCart(cart);
},
// 设置购物车状态  重新计算 底部工具栏数据 全选  总价格 购买数量
setCart(cart){
  let allChecked = true;
  // 1、总价格 总数量
  let totalPrice = 0;
  let totalNum = 0;
  cart.forEach(v => {
    if(v.checked){
         totalPrice += v.num * v.goods_price;
         totalNum +=v.num;
    }else{
      allChecked = false;
    }
  });
  //判断数组是否为空
  allChecked = cart.length!=0?allChecked:false;
  this.setData({
    cart,
    totalPrice,
    totalNum,
    allChecked
  });
  wx.setStorageSync('cart', cart);
 
},


// 这是我自己的 处理逻辑
// 商品数量  加
add(e){
  console.log('增加',e.currentTarget.dataset.id);
  var cart  = this.data.cart;
  cart.forEach(v=>{
    if(v.goods_id == e.currentTarget.dataset.id){
      v.num+=1;
      this.setCart(cart);
    }
  })
},

// 商品数量  减
subtract(e){
  console.log('减少',e.currentTarget.dataset.id)
  var cart  = this.data.cart;
  cart.forEach(v=>{
    if(v.goods_id == e.currentTarget.dataset.id){
      if(v.num>1){
        v.num-=1;
        this.setCart(cart);
      }else{
        wx.showToast({
          title: '商品数量不能为0',
          icon:'none'
        })
      }
    }
  })
},

// 商品数量编辑功能
async handleItemNumEdit(e){
  var vm = this;
  //1 获取传递过来的参数  
  const id = e.currentTarget.dataset.id;
  const operation = e.currentTarget.dataset.operation;
  console.log('e',id,operation);
  // 2 获取购物车数组  cart
  var cart = this.data.cart;
  // 3 找到需要修改的商品的索引 获取当前的点击项 与 与数组 id相同的项的  index
  var index =cart.findIndex(v=>v.goods_id == id);
  // 4 修改数量
    
  if(cart[index].num == 1 && operation != 1){
    const res = await showModal({
      content: '是否删除当前商品'
    });
    if (res.confirm) {
      cart.splice(index,1)
       vm.setCart(cart);
       console.log('cart.length',cart.length)
       if(cart.length==0){
        vm.setData({
          hintStatus:true
        })
      }
    }
  }else{
    cart[index].num += operation;
    // 5 设置回缓存和data中
    this.setCart(cart); 
  }
  
},
// 购买结算操作
async buy(){
   const address = wx.getStorageSync('address');
  // 判断购物车是否有数据，回显图片展示  
   if(!address){
    const res = await showToast({
      content: '收货地址不能为空！！！'
    });
  }else if(this.data.totalNum == 0){
    const res = await showToast({
      content: '购物车暂无商品，请添加商品哦！！！'
    });
  }else{
    wx.showToast({
      title: '购买成功',
    })
    // 跳转到支付页面
    wx.navigateTo({
      url: '/pages/pay/index',
    })
  }
},

// 跳转分类页面
toCategory(){
  wx.switchTab({
    url: 'pages/category/index',
  })
}


  
})